package com.ww.springboot.boot.algorithm.list;

import cn.hutool.json.JSONUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
 * <p>
 * 请你将两个数相加，并以相同形式返回一个表示和的链表。
 * <p>
 * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/add-two-numbers
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * <p>
 * 每个链表中的节点数在范围 [1, 100] 内
 * 0 <= Node.val <= 9
 * 题目数据保证列表表示的数字不含前导零
 *
 * @author wanwei
 * @since 2021-03-06 10:28
 */
public class AddTwoDemo {

    public static void main(String[] args) {
        int[] a = {2,4,3};
        int[] b = {5,6,4};

        String[] c = new String[10];
        System.out.println(JSONUtil.toJsonStr(c));

        System.out.println(JSONUtil.toJsonStr(method(a, b)));
    }

    private static int[] method(int[] a, int[] b) {
        //获取最大遍历数
        int index = a.length;
        if (a.length < b.length) {
            index = b.length;
        }
        int[] c = new int[10];

        //添加标识表示是否进位
        Boolean flag = false;
        for (int i = 0; i < index; i++) {
            int total = 0;
            //如果a不为空则参与加法
            if (a.length > i) {
                total += a[i];
            }
            //如果b不为空则参与加法
            if (b.length > i) {
                total += b[i];
            }

            //如果有进位则加1
            if (flag) {
                total += 1;
            }
            //和大于等于10 则进位
            if (total >= 10) {
                total -= 10;
                flag = true;
            } else {
                flag = false;
            }
            //放入新数组中
            c[i] = total;
        }
        return c;
    }
}
